Option Explicit

'################################################################
' Descriptor
' sql entity 管理器接口
' 提供 entity 的管理, 逻辑名<-->物理名之间的转换,
' 逻辑sql<-->物理sql之间的转换等功能
'################################################################

'################################################################
' Function
'################################################################
'----------------------------------------------------------------
' entity 名转换
'----------------------------------------------------------------
' 使用 entity 的物理名来获取 entity 的逻辑名
'
' 如果无法找到，则返回 ""
'
' @param phyName entity 的物理名
Public Function getEntityLogicName(ByRef phyName As String) As String
End Function

' 使用 entity 的逻辑名来获取 entity 的物理名
'
' 如果无法找到，则返回 ""
'
' @param phyName entity 的逻辑名
Public Function getEntityPhyName(ByRef logicName As String) As String
End Function

'----------------------------------------------------------------
' item 名转换
'----------------------------------------------------------------
' 使用 item 逻辑名，获取 item 物理名
'
' 如果无法找到，则返回 ""
'
' @param itemLogicName item 逻辑名
' @param entityName entity名
'                   可以是逻辑名，可以是物理名，需要各实现类提供判断的实现
Public Function getItemPhyName(ByRef itemLogicName As String, ByRef entityName As String) As String
End Function

' 使用 item 逻辑名 + entity 物理名，获取 item  物理名
'
' 如果无法找到，则返回 ""
'
' @param itemLogicName item 的逻辑名
' @param entityPhyName entity物理名
Public Function getItemPhyNameByEntityPhyName(ByRef itemLogicName As String, ByRef entityPhyName As String) As String
End Function

' 使用 item 逻辑名 + entity 逻辑名，获取 item 物理名
'
' 如果无法找到，则返回 ""
'
' @param itemLogicName item 逻辑名
' @param entityLogicName entity逻辑名
Public Function getItemPhyNameByEntityLogicName(ByRef itemLogicName As String, ByRef entityLogicName As String) As String
End Function

' 使用 item 物理名获取 item 逻辑名
'
' 如果无法找到，则返回 ""
'
' @param itemLogicName item 物理名
' @param entityName entity名
'                   可以是逻辑名，可以是物理名，需要各实现类提供判断的实现
Public Function getItemLogicName(ByRef itemPhyName As String, ByRef entityName As String) As String
End Function

' 使用 item 物理名 + entity 物理名，获取 item 逻辑名
'
' 如果无法找到，则返回 ""
'
' @param itemPhyName item 物理名
' @param entityPhyName entity物理名
Public Function getItemLogicNameByEntityPhyName(ByRef itemPhyName As String, ByRef entityPhyName As String) As String
End Function

' 使用 item 物理名 + entity 逻辑名，获取 item 逻辑名
'
' 如果无法找到，则返回 ""
'
' @param itemPhyName item 物理名
' @param entityLogicName entity逻辑名
Public Function getItemLogicNameByEntityLogicName(ByRef itemPhyName As String, ByRef entityLogicName As String) As String
End Function

'----------------------------------------------------------------
' 检查 item 名的类型
'----------------------------------------------------------------
' 检查当前的 item 是不是逻辑名
'
' @param itemName, 需要检查的 item 名称
' @param entityLogicName, entity逻辑名
Public Function isLogicItemNameByEntityLogicName(ByRef itemName As String, ByRef entityLogicName As String) As Boolean
End Function

' 检查当前的 item 是不是物理名
'
' @param itemName, 需要检查的 item 名称
' @param entityPhyName, entity物理名
Public Function isPhyItemNameByEntityPhyName(ByRef itemName As String, ByRef entityPhyName As String) As Boolean
End Function

'----------------------------------------------------------------
' 获取名称映射
'----------------------------------------------------------------
' 返回指定 entity 下的所有 item 物理名
'
' 如果没有找到 entity ，则返回 `Nothing`
' 如果完全没有 `物理 item 名`，则返回 `Nothing`
'
' @param entityName entity 名称
Public Function getItemPhyNames(ByRef entityName As String) As IPrimitiveArrayRef
End Function

' 返回指定 entity 下的所有 item 逻辑名
'
' 如果没有找到 entity ，则返回 `Nothing`
' 如果完全没有 `逻辑 item 名`，则返回 `Nothing`
'
' @param entityName entity 名称
Public Function getItemLogicNames(ByRef entityName As String) As IPrimitiveArrayRef
End Function

'----------------------------------------------------------------
' 获取名称映射
'----------------------------------------------------------------
' 物理 item 名 --> 逻辑 item 名

' 自动判断 entity 名列名，并获取: `物理 item 名 --> 逻辑 item 名` 的映射
' 如果没有找到 entity ，则返回 Nothing
' 如果完全没有 物理 item 名，则返回 Nothing
' 如果某个 item 只有物理 item 名，没有逻辑 item 名，则保存映射为: 物理 item 名 --> ""
'
' @param entityName entity 名
' @return dictionary
Public Function getItemPhyLogicMap(ByRef entityName As String) As Object
End Function

' 使用逻辑 entity 名，获取: `物理 item 名 --> 逻辑 item 名` 的映射
' 如果没有找到 entity ，则返回 Nothing
' 如果完全没有 物理 item 名，则返回 Nothing
' 如果某个 item 只有物理 item 名，没有逻辑 item 名，则保存映射为: 物理 item 名 --> ""
'
' @param entityLogicName 逻辑 entity 名
' @return dictionary
Public Function getItemPhyLogicMapByEntityLogicName(ByRef entityLogicName As String) As Object
End Function

' 使用物理 entity 名，获取: `物理 item 名 --> 逻辑 item 名` 的映射
' 如果没有找到 entity ，则返回 Nothing
' 如果完全没有 物理 item 名，则返回 Nothing
' 如果某个 item 只有物理 item 名，没有逻辑 item 名，则保存映射为: 物理 item 名 --> ""
'
' @param entityPhyName 物理 entity 名
' @return dictionary
Public Function getItemPhyLogicMapByEntityPhyName(ByRef entityPhyName As String) As Object
End Function

'------------------------------------
' 逻辑 item 名 --> 物理 item 名

' 自动判断 entity 名列名，并获取: `逻辑 item 名 --> 物理 item 名` 的映射
' 如果没有找到 entity ，则返回 Nothing
' 如果完全没有 物理 item 名，则返回 Nothing
' 如果某个 item 只有逻辑 item 名，没有物理 item 名，则保存映射为: 物理 item 名 --> ""
'
' @param entityName entity 名
' @return dictionary
Public Function getItemLogicPhyMap(ByRef entityName As String) As Object
End Function

' 使用逻辑 entity 名，获取: `逻辑 item 名 --> 物理 item 名` 的映射
' 如果没有找到 entity ，则返回 Nothing
' 如果完全没有 逻辑 item 名，则返回 Nothing
' 如果某个 item 只有逻辑 item 名，没有物理 item 名，则保存映射为: 逻辑 item 名 --> ""
'
' @param entityLogicName 逻辑 entity 名
' @return dictionary
Public Function getItemLogicPhyMapByEntityLogicName(ByRef entityLogicName As String) As Object
End Function

' 使用物理 entity 名，获取: `逻辑 item 名 --> 物理 item 名` 的映射
' 如果没有找到 entity ，则返回 Nothing
' 如果完全没有 逻辑 item 名，则返回 Nothing
' 如果某个 item 只有逻辑 item 名，没有物理 item 名，则保存映射为: 逻辑 item 名 --> ""
'
' @param entityLogicName 物理 entity 名
' @return dictionary
Public Function getItemLogicPhyMapByEntityPhyName(ByRef entityPhyName As String) As Object
End Function
